package org.ht.demo.openapi.util;

import lombok.Getter;
import org.ht.demo.openapi.annotation.ParseToField;
import org.ht.demo.openapi.annotation.ParseToList;
import org.ht.demo.openapi.annotation.ParseToMethod;


import java.util.List;

/**
 *
 * 事件消息 数据解析模型
 */
@Getter
public class PushEventParseModel {

    @ParseToMethod(byteRange = {5,6},returnToField = "listSize")//消息长度的位置
    public Integer converToListSize(String data){
        //单条数据字节长 28
        return Integer.parseInt(data,16) / 28;
    }
    private Integer listSize;

    @ParseToList(byteStart = 17,itemByteLength = 28,listSizeFieldName = "listSize")
    private List<DataModel> dataList;

    @Override
    public String toString() {
        return "PushEventParseModel{" +
                "listSize=" + listSize +
                ", dataList=" + dataList.toString() +
                '}';
    }


    @Getter
    public static class DataModel {
//        1A8B 事件序列号
//        4f  消息码
//        34  事件ID
//        02  告警等级
//        00  事件结果
//        02 事件执行者ID
//        FFFFFF02 时间发起者
//        5E93CB07  执行该事件时的时间戳
//        80000000 	ALM_N
//        C0000000 	ALM_O
//        0208FDFB00 //无效字节

        @ParseToField(byteRange = {1,2})//事件序列号
                String No;

        @ParseToField(byteRange = {3})//消息码
                String CODE;

        @ParseToField(byteRange = {4})//事件ID
                String EVT_ID;

        @ParseToField(byteRange = {5})//告警等级
                String EVT_LV;

        @ParseToField(byteRange = {6})//事件结果
                String EVT_RE;

        @ParseToField(byteRange = {7})//事件执行者ID
                String EVT_EX;

        @ParseToField(byteRange = {8,11})//事件发起者
                String EVT_SP;

        String TIME;
        @ParseToMethod(byteRange = {12,15},returnToField = "TIME")//时间戳
        public String converTime(String d){
            return d;//Long.valueOf(Integer.parseInt(d,16) * 1000);
        }

        @ParseToField(byteRange = {16,19})
        Integer ALM_N;

        @ParseToField(byteRange = {20,23})
        Integer ALM_O;

        @Override
        public String toString() {
            return "DataModel{" +
                    "No='" + No + '\'' +
                    ", CODE=" + CODE +
                    ", EVT_ID=" + EVT_ID +
                    ", EVT_LV=" + EVT_LV +
                    ", EVT_RE=" + EVT_RE +
                    ", EVT_EX=" + EVT_EX +
                    ", EVT_SP=" + EVT_SP +
                    ", TIME=" + TIME +
                    ", ALM_N='" + ALM_N + '\'' +
                    ", ALM_O='" + ALM_O + '\'' +
                    '}';
        }
    }


//    //以下为head段
//    {
//        f1 协议版本 1
//        A4 消息ID   2
//        E1 附加码 （实时事件） 3
//        01  附加码2 事件数量  4
//        001c 消息长度       6
//        0010 消息序列号     8
//        98 CC 4D 00 0F 51  MAC地址  14
//        10 时区号    15
//        00  电箱号   16
//    }
//    f1 a4 e1 01 001c 1105 98cc4d300fe4 10 00
//    f1 a4 e1 01 001c 0004 98cc4d300fc7 10 00
//    0026 45 3a 02 05 01 ffffff01 5f9c200a 00009af1 00002710 0005000000   a75c4287
//    0009 45 3a 02 05 01 ffffff01 5f9ba991 0000fde8 00000bb8 0005000000
//    977fa693
//    //以下为data段
//	1A8B4534020002FFFFFF025E93CB0780000000C00000000208FDFB00
//    {
//        1A8B 事件序列号
//        4f  消息码
//        34  事件ID
//        02  告警等级
//        00  事件结果
//        02 事件执行者ID
//        FFFFFF02 时间发起者
//        5E93CB07  执行该事件时的时间戳
//        80000000 	ALM_N
//        C0000000 	ALM_O
//        0208FDFB00 //无效字节
//    }
//    //以下为CRC校验段
//	42599234
//}



}
